home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / et / et_h.awk < prev   
Text File  |  2005-10-13  |  5KB  |  205 lines

  1. BEGIN { 
  2. if ( length(outfn) == 0) {
  3.     outfn = outfile
  4. }
  5. char_shift=64
  6. ## "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
  7. c2n["A"]=1
  8. c2n["B"]=2
  9. c2n["C"]=3
  10. c2n["D"]=4
  11. c2n["E"]=5
  12. c2n["F"]=6
  13. c2n["G"]=7
  14. c2n["H"]=8
  15. c2n["I"]=9
  16. c2n["J"]=10
  17. c2n["K"]=11
  18. c2n["L"]=12
  19. c2n["M"]=13
  20. c2n["N"]=14
  21. c2n["O"]=15
  22. c2n["P"]=16
  23. c2n["Q"]=17
  24. c2n["R"]=18
  25. c2n["S"]=19
  26. c2n["T"]=20
  27. c2n["U"]=21
  28. c2n["V"]=22
  29. c2n["W"]=23
  30. c2n["X"]=24
  31. c2n["Y"]=25
  32. c2n["Z"]=26
  33. c2n["a"]=27
  34. c2n["b"]=28
  35. c2n["c"]=29
  36. c2n["d"]=30
  37. c2n["e"]=31
  38. c2n["f"]=32
  39. c2n["g"]=33
  40. c2n["h"]=34
  41. c2n["i"]=35
  42. c2n["j"]=36
  43. c2n["k"]=37
  44. c2n["l"]=38
  45. c2n["m"]=39
  46. c2n["n"]=40
  47. c2n["o"]=41
  48. c2n["p"]=42
  49. c2n["q"]=43
  50. c2n["r"]=44
  51. c2n["s"]=45
  52. c2n["t"]=46
  53. c2n["u"]=47
  54. c2n["v"]=48
  55. c2n["w"]=49
  56. c2n["x"]=50
  57. c2n["y"]=51
  58. c2n["z"]=52
  59. c2n["0"]=53
  60. c2n["1"]=54
  61. c2n["2"]=55
  62. c2n["3"]=56
  63. c2n["4"]=57
  64. c2n["5"]=58
  65. c2n["6"]=59
  66. c2n["7"]=60
  67. c2n["8"]=61
  68. c2n["9"]=62
  69. c2n["_"]=63
  70. }
  71. /^#/ { next }
  72. /^[ \t]*(error_table|et)[ \t]+[a-zA-Z][a-zA-Z0-9_]+/ {
  73.     table_number = 0
  74.     mod_base = 1000000
  75.     if (NF > 2) {
  76.         table_name = $3
  77.         base_name = $2
  78.     } else {
  79.         table_name = $2
  80.         base_name = table_name
  81.     }
  82.     for(i=1; i<=length(base_name); i++) {
  83.         table_number=(table_number*char_shift)+c2n[substr(base_name,i,1)]
  84.     }
  85.     # We start playing *_high, *low games here because the some
  86.     # awk programs do not have the necessary precision (sigh)
  87.     tab_base_low = table_number % mod_base
  88.     if (tab_base_low < 0) {
  89.         # Work around stupid bug in the ARM libm
  90.         tab_base_low = tab_base_low + mod_base
  91.     }
  92.     tab_base_high = int(table_number / mod_base)
  93.     tab_base_sign = 1;
  94.  
  95.     # figure out: table_number_base=table_number*256
  96.     tab_base_low = tab_base_low * 256
  97.     tab_base_high = (tab_base_high * 256) + \
  98.             int(tab_base_low / mod_base)
  99.     tab_base_low = tab_base_low % mod_base
  100.     if (tab_base_low < 0) {
  101.         # Work around stupid bug in the ARM libm
  102.         tab_base_low = tab_base_low + mod_base
  103.     }
  104.  
  105.     if (table_number > 128*256*256) {
  106.         # figure out:  table_number_base -= 256*256*256*256
  107.         # sub_high, sub_low is 256*256*256*256
  108.         sub_low = 256*256*256 % mod_base
  109.         sub_high = int(256*256*256 / mod_base)
  110.  
  111.         sub_low = sub_low * 256
  112.         sub_high = (sub_high * 256) + int(sub_low / mod_base)
  113.         sub_low = sub_low % mod_base
  114.  
  115.         tab_base_low = sub_low - tab_base_low;
  116.         tab_base_high = sub_high - tab_base_high;
  117.         tab_base_sign = -1;
  118.         if (tab_base_low < 0) {
  119.             tab_base_low = tab_base_low + mod_base
  120.             tab_base_high--
  121.         }
  122.     }
  123.     prefix_str = ""
  124.     curr_idx = 0
  125.     curr_low = tab_base_low
  126.     curr_high = tab_base_high
  127.     curr_sign = tab_base_sign
  128.     print "/*" > outfile
  129.     print " * " outfn ":" > outfile
  130.     print " * This file is automatically generated; please do not edit it." > outfile
  131.     print " */" > outfile
  132.     print "" > outfile
  133.     print "#include <et/com_err.h>" > outfile
  134.     print "" > outfile
  135. }
  136.  
  137. /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,/ {
  138.     # Be tolerant to missing whitespace after `,' ...
  139.     sub(/,/, ", ")
  140.  
  141.     tag=prefix_str substr($2,1,length($2)-1)
  142.     if (curr_high == 0) {
  143.         printf "#define %-40s (%dL)\n", tag, \
  144.             curr_sign*curr_low > outfile
  145.     } else {
  146.         printf "#define %-40s (%d%06dL)\n", tag, curr_high*curr_sign, \
  147.             curr_low > outfile
  148.     }
  149.     curr_low += curr_sign;
  150.     curr_idx++;
  151.     if (curr_low >= mod_base) {
  152.         curr_low -= mod_base;
  153.         curr_high++
  154.     }
  155.     if (curr_low < 0) {
  156.         cur_low += mod_base
  157.         cur_high--
  158.     }
  159. }
  160.  
  161. /^[ \t]*(prefix)$/ {
  162.     prefix_str = ""
  163. }
  164.  
  165. /^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
  166.     prefix_str = $2 "_"
  167. }
  168.  
  169. /^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
  170.     new_idx = $2
  171.     curr_low += curr_sign * (new_idx - curr_idx)
  172.     curr_idx = new_idx
  173.     if (curr_low >= mod_base) {
  174.         curr_low -= mod_base;
  175.         curr_high++
  176.     }
  177.     if (curr_low < 0) {
  178.         cur_low += mod_base
  179.         cur_high--
  180.     }
  181. }
  182.  
  183.  
  184. END {
  185.     print "extern const struct error_table et_" table_name "_error_table;" > outfile
  186.     print "extern void initialize_" table_name "_error_table(void);" > outfile
  187.     print "" > outfile
  188.     print "/* For compatibility with Heimdal */" > outfile
  189.     print "extern void initialize_" table_name "_error_table_r(struct et_list **list);" > outfile
  190.     print "" > outfile
  191.     if (tab_base_high == 0) {
  192.         print "#define ERROR_TABLE_BASE_" table_name " (" \
  193.             sprintf("%d", tab_base_sign*tab_base_low) \
  194.             "L)" > outfile
  195.     } else {
  196.         print "#define ERROR_TABLE_BASE_" table_name " (" \
  197.             sprintf("%d%06d", tab_base_sign*tab_base_high, \
  198.             tab_base_low) "L)" > outfile
  199.     }
  200.     print "" > outfile
  201.     print "/* for compatibility with older versions... */" > outfile
  202.     print "#define init_" table_name "_err_tbl initialize_" table_name "_error_table" > outfile
  203.     print "#define " table_name "_err_base ERROR_TABLE_BASE_" table_name > outfile
  204. }
  205.